<?php
declare (strict_types = 1);

namespace app\admin\model;

/**
 * 管理员用户模型
 * Class AdminUser
 * @package app\admin\model
 */
class AdminUser extends BaseModel
{
    protected $table = 'admin_users';
    
    // 字段类型
    protected $type = [
        'id' => 'integer',
        'role_id' => 'integer',
        'status' => 'integer',
        'last_login_time' => 'datetime',
        'created_at' => 'datetime',
        'updated_at' => 'datetime'
    ];
    
    // 自动完成
    protected $auto = [];
    protected $insert = ['created_at'];
    protected $update = ['updated_at'];
    
    // 时间戳字段名
    protected $createTime = 'created_at';
    protected $updateTime = 'updated_at';
    
    /**
     * 创建时间
     * @return string
     */
    protected function setCreatedAtAttr()
    {
        return date('Y-m-d H:i:s');
    }
    
    /**
     * 更新时间
     * @return string
     */
    protected function setUpdatedAtAttr()
    {
        return date('Y-m-d H:i:s');
    }
    
    /**
     * 密码修改器
     * @param string $value
     * @return string
     */
    protected function setPasswordAttr($value)
    {
        return md5($value);
    }
    
    /**
     * 状态获取器
     * @param $value
     * @param $data
     * @return string
     */
    public function getStatusTextAttr($value, $data)
    {
        $status = [0 => '禁用', 1 => '启用'];
        return $status[$data['status']] ?? '未知';
    }
    
    /**
     * 关联角色
     * @return \think\model\relation\BelongsTo
     */
    public function role()
    {
        return $this->belongsTo('Role', 'role_id', 'id');
    }
    
    /**
     * 验证用户登录
     * @param string $username 用户名
     * @param string $password 密码
     * @return array|bool
     */
    public static function login($username, $password)
    {
        $user = self::where('username', $username)->find();
        
        if (!$user) {
            return ['code' => 1, 'msg' => '用户不存在'];
        }
        
        if ($user->password !== md5($password)) {
            return ['code' => 1, 'msg' => '密码错误'];
        }
        
        if ($user->status != 1) {
            return ['code' => 1, 'msg' => '账号已被禁用'];
        }
        
        // 更新登录时间
        $user->last_login_time = date('Y-m-d H:i:s');
        $user->save();
        
        return ['code' => 0, 'msg' => '登录成功', 'data' => $user];
    }
}